// 定义一个工具类 FileUtils，提供文件操作相关的方法
package cn.edu.swu.dlx;

import java.io.*;
import java.net.URL;
import java.nio.file.*;

public class FileUtils {

    // saveImage 方法用于从指定的 URL 下载图片并保存到本地路径
    // 参数 imageUrl: 图片的网络地址
    // 参数 savePath: 图片要保存的本地路径
    // 抛出 IOException: 当发生输入输出异常时
    public static void saveImage(String imageUrl, String savePath) throws IOException {
        // 确保保存图片的目录存在，如果不存在则创建
        ensureDirectoryExists(Paths.get(savePath).getParent().toString());

        // 使用 try-with-resources 语句自动关闭输入流
        try (InputStream in = new URL(imageUrl).openStream()) {
            // 将图片数据从网络流复制到本地文件
            Files.copy(in, Paths.get(savePath), StandardCopyOption.REPLACE_EXISTING);
            // 记录日志信息
            appendLog("下载图片: " + imageUrl + " 保存到: " + savePath);
        }
    }

    // ensureDirectoryExists 方法用于确保指定目录存在
    // 参数 dirPath: 要检查或创建的目录路径
    // 抛出 IOException: 当发生输入输出异常时
    public static void ensureDirectoryExists(String dirPath) throws IOException {
        // 将字符串路径转换为 Path 对象
        Path path = Paths.get(dirPath);
        // 如果目录不存在，则创建所有必要的父目录
        if (!Files.exists(path)) {
            Files.createDirectories(path);
        }
    }

    // appendLog 方法用于向日志文件追加一条日志记录
    // 参数 log: 要记录的日志内容
    // 抛出 IOException: 当发生输入输出异常时
    public static void appendLog(String log) throws IOException {
        // 构造日志条目，包含当前时间和日志内容
        String logEntry = java.time.LocalDateTime.now() + " - " + log + System.lineSeparator();
        // 将日志条目追加写入到 download_log.txt 文件中
        Files.write(Paths.get("download_log.txt"), logEntry.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    }
}
